package main

import "fmt"

type Human struct {
	name  string
	age   int
	phone string
}

type Student struct {
	Human  //匿名字段，引用其他结构体，同时继承此结构体的方法
	school string
}

type Employee struct {
	Human   //匿名字段
	company string
}

//在Human上定义了一个method
func (h *Human) SayHi() {
	fmt.Printf("你好，我叫%s，你可以打我电话%s\n", h.name, h.phone)
}

//重写Employee继承的SayHi方法
func (e *Employee) SayHi() {
	fmt.Printf("你好，我叫%s，在%s工作，你可以打我电话%s\n", e.name, e.company, e.phone)
}

func main() {
	mark := Student{Human{"Mark", 25, "222-222-YYYY"}, "MIT"}
	sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}

	mark.SayHi()
	sam.SayHi()
}
